package com.prevpn.dto;

import lombok.Data;
import java.util.List;
import java.util.Map;

/**
 * 隧道应用 DTO（Data Transfer Object）
 * 用于 /api/v1/resource/createResource 接口的新增隧道应用请求
 * 对应 accessModel = "L3VPN" / subModel = "L3VPN" or "TUN2WEB"
 */
@Data
public class TunnelAppDTO {

    /* ========================= 基本信息 ========================= */
    private String accessModel = "L3VPN";     // 访问模式（固定 L3VPN）
    private String subModel = "L3VPN";        // 子访问模式（L3VPN 或 TUN2WEB）
    private String name;                      // 应用名称（必填）
    private String description;               // 应用描述（可选）

    /* ========================= 应用分类 ========================= */
    private String groupId;                   // 应用分类ID
    private String groupName;                 // 应用分类名称（与 groupId 二选一）

    /* ========================= 节点区域 ========================= */
    private String nodeGroupId;               // 节点区域ID
    private String nodeGroupName;             // 节点区域名称（与 nodeGroupId 二选一）

    /* ========================= 状态与图标 ========================= */
    private Integer status = 1;               // 启用状态（1=启用, 0=禁用）
    private String iconId = "1";              // 图标ID（1~31）
    private Integer allowApply = 1;           // 是否允许用户自助申请（1=允许）
    private String accessAddress;             // 应用访问入口地址（如：https://example.com）

    /* ========================= 服务器与地址配置 ========================= */
    private List<Map<String, Object>> addressList;         // 必填：服务器地址列表 [{protocol, host, port}]
    private List<Map<String, Object>> excludeAddressList;  // 可选：排除地址列表
    private Map<String, Object> excludeAddress;            // 可选：排除地址配置（SP2 及以上版本）

    /* ========================= 证书配置 ========================= */
    private String trustedCertId;             // 授信证书ID（TUN2WEB 必填）
    private String trustedCertName;           // 授信证书名称（与 trustedCertId 二选一）

    /* ========================= 申请信息 ========================= */
    private Map<String, Object> applyForInfo; // 用户申请信息 {content, accessReason[]}

    /* ========================= 扩展字段 ext ========================= */
    private Map<String, Object> ext;          // hide, enableTCPPrefL3, addrPretend, openModel 等

    /* ========================= 打开方式（新版 openModel） ========================= */
    private Map<String, Object> openModel;    // 新版打开方式配置（Windows/Mac/Linux）

    /* ========================= 单点登录配置 ========================= */
    private Map<String, Object> ssoConfig;    // SSO 配置，建议传 { "enable": false }
}
